<?php
include_once 'core/Node.php';
include_once 'interpreter/PageInterpreter.php';
include_once 'interpreter/HeaderInterpreter.php';
include_once 'interpreter/ButtonInterpreter.php';
include_once 'interpreter/GeneralInterpreter.php';
include_once 'interpreter/InputInterpreter.php';
include_once 'interpreter/TitleInterpreter.php';
include_once 'interpreter/TextInterpreter.php';
include_once 'interpreter/ScriptInterpreter.php';
include_once 'interpreter/ListViewInterpreter.php';
include_once 'interpreter/LinkInterpreter.php';
include_once 'interpreter/StyleInterpreter.php';

class Interpreter{
	
	var $interpreters;
	var $defaultInterpreter;
	
	public function __construct(){
		$this->interpreters = array(
			'page' => new PageInterpreter($this),
			'header' => new HeaderInterpreter($this),
			'button' => new ButtonInterpreter($this),
			'input' => new InputInterpreter($this),
			'title' => new TitleInterpreter($this),
			'text' => new TextInterpreter($this),
			'script' => new ScriptInterpreter($this),
			'listview' => new ListViewInterpreter($this),
			'link' => new LinkInterpreter($this),
			'style' => new StyleInterpreter($this),
			'option' => NULL
		);
		$this->defaultInterpreter = new GeneralInterpreter($this);
	}
	
	public function interpret(Node $node){
		$name = $node->getAttribute('#');
		$subinterpreter = $this->getInterpreter($name);	
		$ret = '';
		if(NULL != $subinterpreter){
			$ret .= $subinterpreter->interpret($node);
		}
		
		return $ret;
	}
	
	function getInterpreter($name){
		if(array_key_exists($name, $this->interpreters)){
			return $this->interpreters[$name];
		}
		return $this->defaultInterpreter;
	}
}
